Now改 RepoImpl 的非车详情组装逻辑。Now更新文档:新增 3.4 列表说明并修正「已知限制」第 1 条。已定位并修好(后端侧)。
先说数据:导入没问题,2 个险种都落库了
pi_policy_nocar_stg(批次 PN20261029163520FCB5AF47):row 5 =R2026012意外医疗 3800、row 6 =R2026013意外住院医疗 58。- 回写主表:
no_car_charge2 条都在(id 89、90),险种明细完整。 no_car_main只有 1 行,是汇总行:PREMIUM 3858 = 3800+58、PREMIUMNOTAX 4050 = 4000+50,而RISKCODE只留了最后覆盖进去的R2026013。
根因:详情 VO 只有「一个险种」的位置
PropertyInsuranceRepoImpl.getNoCarPolicyData() 用 left join no_car_charge 查出 N 行险种,但 PolicyDataDetailVo 里非车险种只有单对象 noCarRiskInfo,for 循环里后者覆盖前者 → 页面永远只剩 1 个(旧代码 order by e.ID desc,留的是 ID 最小的那条)。文档 §六「已知限制」第 1 条记的就是这个问题。
改动(3 个文件)
PolicyDataDetailVo:新增List<ProRiskInfo> noCarRiskInfoList;noCarRiskInfo保留(= 列表第一个险种),老前端不会崩。PropertyInsuranceRepoImpl.getNoCarPolicyData():- SQL 排序改
order by e.ID asc(列表顺序 = 导入顺序); - 循环内每个险种构造一个
ProRiskInfo收进列表,循环外setNoCarRiskInfoList(list),noCarRiskInfo取list.get(0); - 新增
isRiskRowEmpty(),left join落空的全 null 行不进列表(否则会多出一个空险种卡片)。
- SQL 排序改
- 文档
产险保单详情_全量字段清单§3.4 / §六 已同步。
验证
- 等价 SQL 实跑
022026102900010003→ 返回 2 行(R2026012意外医疗 3800 /R2026013意外住院医疗 58)。 - 编译:
verify91309 源 0 错误,诱饵被捕获(可信)。
前端必须配合改一步(否则页面还是只显示 1 个)
JavaScript
复制成功
const risks = (detail.noCarRiskInfoList && detail.noCarRiskInfoList.length)
? detail.noCarRiskInfoList
: (detail.noCarRiskInfo ? [detail.noCarRiskInfo] : []);
// 再按 risks 循环渲染险种卡片
两点提醒
- 车险有同类隐患:
car_charge里存在 3 例「同一 POLICYNO + 同一 CLASSTYPE 多条」的数据,vciRiskInfo/tciRiskInfo同样是单对象会互相覆盖。要不要也按列表处理,你定口径我再改。 - 这条保单
no_car_charge第一条PREMIUM=3800但PREMIUMNOTAX=4000(不含税 > 含税),看着像导入数据本身填反了,可以顺手核一下源文件。
Code
复制成功
{
"code": "000000",
"msg": "查询成功",
"userName": null,
"comName": null,
"data": {
"policyBasicInfo": {
"proposalNo": "022026102900010003-01",
"policyNo": "022026102900010003",
"bzProposalNo": null,
"tciPolicyNo": null,
"busProposalNo": null,
"vciPolicyNo": null,
"inputDate": "2026-10-27",
"acceptDate": "2026-10-28",
"generateDate": "2026-10-29",
"statusCode": "1",
"vciStatusCode": null,
"tciStatusCode": null,
"tciPolicyIssueDate": null,
"vciPolicyIssueDate": null,
"companyComCode": null,
"companyComName": null,
"companyCode": "00006",
"companyName": "中国大地财产保险股份有限公司",
"way": null,
"businessNature": null,
"channel": null,
"busType": null,
"businessAttributes": "1",
"premium": "3858.00",
"premiumNoTax": "4050.00",
"bizForm": "自有业务"
},
"insureInfo": {
"type": "1",
"insureName": "赵一",
"sexType": "1",
"identifyType": "1",
"identifyNumber": "350101199605010053",
"identifyValidDate": "2035-10-01 00:00:00",
"mobilePhone": "18921889090",
"contactName": null,
"companyPhone": null,
"job": "教师",
"country": "中国",
"partyAddress": "浙江省杭州市西湖区龙井路1号",
"businessScope": null,
"legalPerson": null,
"authorizedName": null,
"authorizedIdType": null,
"authorizedIdNo": null,
"authorizedIdValidDate": null,
"authorizedMobile": null,
"insureAddress": "浙江省杭州市西湖区龙井路1号"
},
"insuredInfoList": [
{
"type": "1",
"beneficiaryIdentification": null,
"insuredName": "赵一",
"sexType": "1",
"identifyType": "1",
"identifyNumber": "350101199605010053",
"identifyValidDate": "2035-10-01 00:00:00",
"mobilePhone": "18921889090",
"companyPhone": null,
"partyAddress": "浙江省杭州市西湖区龙井路1号",
"job": "教师",
"country": "中国",
"insRelationApp": "1",
"insRelationInsured": null
}
],
"syInfoList": [],
"agentInfo": {
"agentCode": "016330D0048",
"agentName": "陈萍萍",
"comCode": "BY016431",
"comName": "天安佰盈保险销售有限公司浙江杭州分公司",
"introduceType": null,
"agentStatus": "在职",
"introduceCode": null,
"introduceName": null
},
"noCarRiskInfo": {
"riskCode": "R2026012",
"riskName": "百万医疗险",
"startTime": "2026-10-29",
"endTime": "2027-10-29",
"classType": "健康险",
"paidPremium": "3800.00",
"totalTax": null,
"amount": "3000000.00",
"premiumNoTax": "4000.00",
"payType": "趸交",
"settleCommissionRate": null,
"settleCommissionBasis": null
},
"noCarRiskInfoList": [
{
"riskCode": "R2026012",
"riskName": "百万医疗险",
"startTime": "2026-10-29",
"endTime": "2027-10-29",
"classType": "健康险",
"paidPremium": "3800.00",
"totalTax": null,
"amount": "3000000.00",
"premiumNoTax": "4000.00",
"payType": "趸交",
"settleCommissionRate": null,
"settleCommissionBasis": null
},
{
"riskCode": "R2026013",
"riskName": "附加住院医疗",
"startTime": "2026-10-29",
"endTime": "2027-10-29",
"classType": "健康险",
"paidPremium": "58.00",
"totalTax": null,
"amount": "50000.00",
"premiumNoTax": "50.00",
"payType": "趸交",
"settleCommissionRate": null,
"settleCommissionBasis": null
}
]
},
"flag": false
}